package content

import (
	"fmt"
	"gorm.io/gorm"
	"woo-server/coms/structs"
	"woo-server/coms/utils"
	"woo-server/models/db"
)

// 用户表
type UploadFile struct {
	*structs.Common `gorm:"-" json:"-"`
	FileId          uint64 `gorm:"primary_key;AUTO_INCREMENT;column:file_id;"` // 自增主键
	Storage         string `gorm:"column:storage;size:255;"`                   // 存储方式
	GroupId         uint64 `gorm:"column:group_id"`                            // 文件分组id
	FileName        string `gorm:"column:file_name;size:255;"`                 // 文件路径
	FileSize        int64  `gorm:"column:file_size;size:255;"`                 // 文件大小(字节)
	FileType        string `gorm:"column:file_type;size:255;"`                 // 文件类型
	Extension       string `gorm:"column:extension;size:50;"`                  // 文件扩展名
	IsUser          int    `gorm:"column:is_user;size:150;"`                   // 是否为c端用户上传
	IsDelete        int    `gorm:"column:is_delete;size:150;"`                 // 软删除
	IsRecycle       int    `gorm:"column:is_recycle;size:150;"`                // 是否已回收
	db.Basics
}

// 表名
func (f *UploadFile) TableName() string {
	return "woo_upload_file"
}

// 初始化
func NewUploadFile(com *structs.Common) *UploadFile {
	d := &UploadFile{}
	return d
}

// 创建
func (f *UploadFile) Create() error {
	return utils.GORM.Debug().Table(f.TableName()).Create(f).Error
}

// 批量创建
func (f *UploadFile) BatchCreate(data []*UploadFile) error {
	return utils.GORM.Debug().Table(f.TableName()).Create(data).Error
}

// 获取分页列表及总数
func (f *UploadFile) GetListAndTotal(search int, page int, pageSize int) ([]*UploadFile, int64) {
	list := make([]*UploadFile, 0)
	var total int64 = 0

	// 查询
	query := utils.GORM.Debug().Table(f.TableName())

	if search > 0 {
		searchLike := fmt.Sprintf("%%%s%%", search)
		query = query.Where("file_name like ? or group_id = ?", searchLike, search)
	}

	// 总数
	query.Count(&total)

	// 列表
	offset := (page - 1) * pageSize
	query.Limit(pageSize).Offset(offset).Find(&list)

	return list, total
}

// 获取单条数据
func (f *UploadFile) GetFirst(where string) *UploadFile {
	//info := make([]*UploadFile, 0)

	// 查询
	query := utils.GORM.Debug().Table(f.TableName())

	query = query.Where(where)

	// 总数
	//query.Count(&total)

	// 列表
	//offset := (page - 1) * pageSize
	query.First(&f)
	return f
}

// 获取单条数据
func (f *UploadFile) GetFind(filed interface{}, args ...interface{}) *UploadFile {
	//info := make([]*UploadFile, 0)

	// 查询
	query := utils.GORM.Debug().Table(f.TableName())

	query = query.Where(filed, args)

	// 总数
	//query.Count(&total)

	// 列表
	//offset := (page - 1) * pageSize
	query.Find(&f)
	return f
}

// WHERE 条件
func (f *UploadFile) Where(query string, args interface{}) *gorm.DB {
	return utils.GORM.Debug().Table(f.TableName()).Where(query, args)
}

// WHERE 条件
func (f *UploadFile) First() *gorm.DB {
	return utils.GORM.Debug().Table(f.TableName()).First(&f)
}

// WHERE 条件
func (f *UploadFile) Find(dest interface{}, conds ...interface{}) *gorm.DB {
	return utils.GORM.Debug().Table(f.TableName()).Find(&dest, conds)
}
